.code32
.text
.global io_load_eflags
.global io_store_eflags
.global io_in8
.global io_in16
.global io_in32
.global io_out8
.global io_out16
.global io_out32

io_load_eflags:
                PUSHF          # PUSH EFLAGS <82>Æ<82>¢<82>¤<88>Ó<96>¡
                POP             %EAX
                RET

io_store_eflags:
                MOVL             4(%esp), %EAX
                PUSH    %EAX
                POPF           #; POP EFLAGS <82>Æ<82>¢<82>¤<88>Ó<96>¡
                RET


io_in8:        #; int io_in8(int port);
                MOVL             4(%esp), %EDX             #; port
                MOVL             $0, %EAX
                INB              %dx, %AL
                RET

io_in16:       #; int io_in16(int port);
                MOVL            4(%esp), %EDX             #port
                MOVL             $0, %EAX
                INW              %dx, %AX
                RET

io_in32:       #; int io_in32(int port);
                MOVL            4(%esp), %EDX             #; port
                INL              %dx, %EAX
                RET

io_out8:       #; void io_out8(int port, int data);
                MOVL             4(%esp), %EDX             #; port
                MOV             8(%esp), %AL              #; data
                OUTB             %al, %DX
                RET

io_out16:      #; void io_out16(int port, int data);
                MOVL             4(%esp), %EDX             #; port
                MOVL             8(%esp), %EAX             #; data
                OUTW             %ax, %DX
                RET

io_out32:      #; void io_out32(int port, int data);
                MOVL             4(%esp), %EDX             #; port
                MOVL             8(%esp), %EAX              #; data
                OUTL             %eax, %DX
                RET

